<?php

namespace addons\travel\controller;

use addons\sum\exception\Exception;
use app\common\controller\Api;
use think\Lang;

class Base extends Api
{
    //语言
    protected $langSlug='zh_cn';
    protected $langCode='zh-cn';


    public function _initialize()
    {
//      parent::_initialize();
        $controllername = strtolower($this->request->controller());
        $this->langCode=$langCode=$this->request->header('Language','zh-cn');
        $langItem=getLangItem($langCode);
        $this->langSlug=$langItem['slug'];
        $this->request->langset($langCode);
        parent::_initialize();
        //因为 parent::_initialize(); 中也有 $this->loadlang($controllername); 相当于调了2遍。第二边的时候才获得了请求头中的语言。或者把 parent::_initialize(); 写到设置 $langCode 之后 不再调 $this->loadlang($controllername);
//      $this->loadlang($controllername);
    }

    protected function loadlang($name)
    {
        Lang::load(ADDON_PATH  . 'travel/lang/' . $this->request->langset() . '/' . str_replace('.', '/', $name) . '.php');
    }


    protected function sumValidate($params, $class, $scene, $rules = []) {
        $validate = validate(str_replace('controller', 'validate', $class));
        if (!$validate->check($params, $rules, $scene)) {
            $this->error($validate->getError());
        }
    }

    /**
     * 处理语言数据
     * @return void
     */
    protected function doLangData($lang_data){
        $langSlug=$this->langSlug;
        $lang_arr=json_decode($lang_data,true);
        $record=[];
        if(isset($lang_arr[$langSlug])){// 如果有该语言-没有的可能性是没配置这个语言或者是后台默认的语言
            foreach ($lang_arr[$langSlug] as $lk=>$lv){//遍历支持多语言的字段-处理特殊情况如图片的 cdnurl()
                if($lv){//如果该字段有值才覆盖默认的。可以解决多语言内容是一致时不必填写多次。如多语言图片是一致的，上传默认的就行
                    //- 在模型中配置属性，如 image 使用 cdnurl,是在最终的结果时处理的。所以这里直接覆盖 image 就行，不用再根据数据类型【image,images,content】提前在处理数据
                    $record[$lk]=$lv;
                }
            }
        }
        return $record;
    }

}
